package J11_23;

public class test {

    //编写一个算法来判断一个数 n 是不是快乐数。
    //
    //「快乐数」 定义为：
    //
    //对于一个正整数，每一次将该数替换为它每个位置上的数字的平方和。
    //然后重复这个过程直到这个数变为 1，也可能是 无限循环 但始终变不到 1。
    //如果这个过程 结果为 1，那么这个数就是快乐数。
    //如果 n 是 快乐数 就返回 true ；不是，则返回 false 。

    public static void main(String[] args) {

        int n = 19;

        System.out.println(isHappy(n));

    }
    public static boolean isHappy(int n) {
        //定义双指针
        int i = 1;
        int j = 2;

        while (true) {
            if (toSum(n, i) == toSum(n, j)) {
                return toSum(n, i) == 1;
            }
            i++;
            j += 2;
        }
    }
    public static int toSum(int n,int count) {
        if(count == 0){
            return n;
        }
        int sum = 0;
        int m = n;
        //求和
        do {
            sum += Math.pow(m%10,2);
        }
        while((m/=10) != 0);

        return toSum(sum,count - 1);

    }
}
